using System;
using System.Collections.Generic;
using System.Text;

namespace PS.Framework.Remoting
{
	/// <summary>
	/// base class for remote object
	/// Provided remote objects must be inherited
	/// from this.
	/// </summary>
	[Serializable]
	public abstract class RemoteObject<T>
    {
        #region Events

        #endregion

        #region Fields

        private static Object _oLock = new Object();

		#endregion

		#region Properties

		private static T _instance;
		public static T Instance
		{
			get
			{
				lock (_oLock)
				{
					if (_instance == null)
						_instance = (T)Activator.CreateInstance(typeof(T));
				}
				return _instance;
			}
		}

		#endregion

		#region Construction / Destruction
		#endregion

		#region Methods



		#endregion
	}
}
